	/**
	 * variáveis globais para formulário
	 */
	// matriz para guardar os erros do formulário
	var erros_form 		= new Array();

	// primeiro campo do formulário com erro
	var erro_foco 		= "";

	/**
	 * Retorna a validação do formulário
	 */
	function getValidacaoLocal(form)
	{
		var a = 0;		// contador
		var e = null; 	// elemento que vai receber o foco
		
		// instanciando o formuláro
		var objForm = document.forms[form];
		
		// validando cada campo do formulário
		for (a=0; a<objForm.elements.length; a++) 
		{
			// validando o campo
			switch(objForm.elements[a].type)
			{
				case "text":
				case "password":
				case "senha":
					setErroLocal(objForm.elements[a]);
					break;
			}
		}
		
		// se ainda possui erro
		if (erros_form.length>0) 
		{
			//alert("O formulário não pode ser enviado porque ainda possui erros !!!");
			if (document.getElementById(erro_foco) != null) document.getElementById(erro_foco).select();
			return false;
		} else
		{
			// se o formulário é ajax, executa a validação no servidor
			if (isset("resposta_ajax"))
			{
				getValidacaoServidor(form);
				return false;
			}
		}
		
		return true;
	}

	/**
	 * Configura os erros do formulário 
	 */
	function setErrosForm(campo,erro,io)
	{
		// erros do formulário
		var erros 			= "";
		
		// matriz temporária para atualizar erros global do formulário
		var nova			= new Array();
		
		// só contador
		var l				= 0;
		
		// ligar ou desligar botões submit do formulário
		var ligar_submit 	= "";

		// inserindo ou removendo o erro vai depender de io
		if (io)
		{
			for (k in erros_form)
			{
				if (erros_form[k] == erro) l++;
			}
			if (!l)
			{
				//erros_form.unshift(erro);
				erros_form.push(erro);
				if (!erro_foco) erro_foco = campo;
			}
		} else
		{
			for (k in erros_form)
			{
				if ( !(erros_form[k]==erro) )
				{
					nova.push(erros_form[k]);
				} else
				{
					if (erro_foco==campo) erro_foco="";
				}
			}
			erros_form = nova;
		}
		
		// escrevendo os erros na tela
		if (document.getElementById("form_alerta") != null)
		{
			for (k in erros_form)
			{
				if (erros_form[k])
				{
					erros = erros+" - "+erros_form[k]+"<br />\n";
				}
			}
			document.getElementById("form_alerta").style.display = "block";
			document.getElementById("form_alerta").innerHTML = erros;
		}
		
		// se ainda possui erros, vamos desligar todos os botões submit do formulário em questão
		if (erros.length>0)
		{
			ligar_submit = "disabled";
		}
		
		// desabilitando todos os botões submit do formulário
		var objForm = document.getElementById(campo).form;
		if (objForm != null)
		{
			for (l=0; l<objForm.elements.length; l++) 
			{
				switch(objForm.elements[l].type)
				{
					case "submit":
						objForm.elements[l].disabled = ligar_submit;
						break;
				}
			}
		} else alert("Não foi possível desabilitar os botões submit porque o nome do formulário é inválido !!!");
		
	}

	/**
	* função validar preenchimento,
	* checa o item corrente conforme suas propriedades
	*/
	function setErroLocal(item) 
	{
		// carca fora se o elemento é nulo.
		if (item == null)
		{
			alert("Elemento de formulário inválido !!!");
			return false;
		}

		// iniciando variáveis locais
		var erro 					= "";
		var obrigatorio 			= 0;
		var caixa					= "";
		var titulo 					= "";
		var tipo 					= "";
		var valor					= "";
		var nome					= "";
		var tamanho_minimo			= 0;
		var valor_menor				= 0;
		var valor_maior				= 0;
		var msg_erro				= "";
		var msg_erros				= new Array();

		// buscando as propriedades do campo
		valor							= item.value;
		nome							= item.name;
		clone		 					= getPropriedades(nome,"clone");
		titulo							= getPropriedades(nome,"titulo"); if (titulo=="") titulo = item.name;
		obrigatorio 					= getPropriedades(nome,"obrigatorio");
		caixa 							= getPropriedades(nome,"caixa");
		tipo 							= getPropriedades(nome,"tipo");
		tamanho_minimo					= getPropriedades(nome,"tamanhominimo");
		tamanho_maximo					= getPropriedades(nome,"tamanhomaximo");
		valor_menor						= getPropriedades(nome,"valor_menor");
		valor_maior						= getPropriedades(nome,"valor_maior");

		// mensagens de erro
		msg_erros["cpf"]				= "Cpf inválido !!!";
		msg_erros["cnpj"]				= "Cnpj inválido !!!";
		msg_erros["data"]				= "Data inválida !!!";
		msg_erros["senha"]				= "Senha inválida !!!";
		msg_erros["senhad"]				= "As senhas estao diferentes !!!";
		msg_erros["email"]				= "e-mail inválido !!!";
		msg_erros["valor_menor"] 		= "Valor muito baixo, Tente maior que "+valor_menor;
		msg_erros["valor_maior"] 		= "Valor muito baixo, Tente menor que "+valor_maior;
		msg_erros["tamanho_minimo"] 	= "O campo "+titulo+" tem que ter no mínimo "+tamanho_minimo+" caracteres !!!";
		msg_erros["tamanho_maximo"] 	= "O campo "+titulo+" tem que ter no máximo "+tamanho_maximo+" caracteres !!!";
		msg_erros["obrigatorio"]		= "O campo "+titulo+" é de preenchimento obrigatório !!!";
		msg_erros["tamanho_minimo_nao"] = "O campo "+titulo+" tem que ter no mínimo "+tamanho_minimo+" caracteres, ou então ficar em branco !!!";

		// configurando o erro pelo tipo
		switch(tipo) 
		{
			case "cpf":
				if (valor.length>0) if (!validar_cpf(valor)) setErrosForm(nome,msg_erros["cpf"],1); else setErrosForm(nome,msg_erros["cpf"],0);
				break;
			case "cnpj":
				if (obrigatorio==1) if (!validar_cnpj(valor)) setErrosForm(nome,msg_erros["cnpj"],1); else setErrosForm(nome,msg_erros["cnpj"],0);
				break;
			case "date":
			case "data":
				if (valor.length>0) if (!validar_data(valor)) setErrosForm(nome,msg_erros["data"],1); else setErrosForm(nome,msg_erros["data"],0); 
				break;
			case "password":
			case "senha":
				var valor2 = "";
				if (document.getElementById(clone) != null) valor2 = document.getElementById(clone).value;

				// verificando os valores
				if ((valor>"" || valor2>"") && (document.getElementById(clone) != null) )
				{
					if (valor != valor2)
					{
						setErrosForm(nome,msg_erros["senhad"],1);
					} else setErrosForm(nome,msg_erros["senhad"],0);
				} else setErrosForm(nome,msg_erros["senhad"],0);
				break;
			case "email":
				if (valor.length>0) if (!validar_email(valor)) setErrosForm(nome,msg_erros["email"],1); else setErrosForm(nome,msg_erros["email"],0); 
				break;
		}

		// verificando o valor menor
		if (valor_menor>0 && obrigatorio==1) 
		{
			if (valor<valor_menor) setErrosForm(nome,msg_erros["valor_menor"],1); else setErrosForm(nome,msg_erros["valor_menor"],0); 
		}

		// verificando o valor maior
		if (valor_maior>0) 
		{
			if (valor>valor_maior) setErrosForm(nome,msg_erros["valor_maior"],1); else setErrosForm(nome,msg_erros["valor_maior"],0); 
		}
		
		// verificando o tamanho mínimo MAS não obrigatório
		if (tamanho_minimo>0 && !obrigatorio) 
		{
			if (valor.length>0 && valor.length<tamanho_minimo) setErrosForm(nome,msg_erros["tamanho_minimo_nao"],1); else setErrosForm(nome,msg_erros["tamanho_minimo_nao"],0); 
		}


		// verificando o tamanho mínimo obrigatório
		if (tamanho_minimo>0 && obrigatorio==1) 
		{
			if (valor.length<tamanho_minimo) setErrosForm(nome,msg_erros["tamanho_minimo"],1); else setErrosForm(nome,msg_erros["tamanho_minimo"],0); 
		}
		
		// verificando o tamanho máximo
		if (tamanho_maximo>0) 
		{
			if (valor.length>tamanho_maximo) setErrosForm(nome,msg_erros["tamanho_maximo"],1); else setErrosForm(nome,msg_erros["tamanho_maximo"],0); 
		}
		
		// verificando a caixa
		//if (caixa=="ma") item.value = valor.toUpperCase();
		//if (caixa=="mi") item.value = valor.toLowerCase();

		// se o campo é de preehcimento obrigatório
		if (obrigatorio==1 && valor=="") setErrosForm(nome,msg_erros["obrigatorio"],1); 
		if (obrigatorio==1 && valor.length>0) setErrosForm(nome,msg_erros["obrigatorio"],0);
	}
	
	/**
	 * Retorna as propriedade de um elemento do formulário
	 */
	function getPropriedades(nome,propriedade) {
		var propriedades = "";
		var retorno = 0;

		if (document.getElementById(nome) != null ) {
			propriedades = document.getElementById(nome).lang;
			
			// pesquisa a propriedade na tag lang
			if (propriedades)
			{
				if (propriedades.indexOf(propriedade)) {
					retorno = propriedades.substr(propriedades.indexOf(propriedade),propriedades.length);
					retorno = retorno.substr(0,retorno.indexOf("-"));
					retorno = retorno.substr((propriedade.length),retorno.length);
				}
			}
			// se não achou, pesquisa as propriedades na campo oculto com sufixo pr_
			
			// se não achou, pesquisa as propriedade do campo na matriz global do formulário
		}
		return retorno;
	}
	
	/**
	* função formatar
	* exemplo: OnKeyPress="formatar(this, '##/##/####')"
	*/
	function getMascara(src, mask)
	{
		var i = src.value.length;
		var saida = mask.substring(0,1);
		var texto = mask.substring(i);
		if (texto.substring(0,1) != saida)
		{
			src.value += texto.substring(0,1);
		}
	}
	
	/**
	* função validar tecla
	* exemplo: OnKeyUp=js_validar_tecla(this,event);
	*/
	function setTecla(item,evento) {
		var i = 0;
		var proximo = "";
		var tecla = evento.keyCode; 
		if (tecla==13) {
			for (i=0; i<item.form.elements.length; i++) {
				if (item == item.form.elements[i]) {
					if (item.form.elements[i+1] != null ) proximo = item.form.elements[i+1].name; else proximo = "bt_enviar";
				}
			}
			switch(document.getElementById(proximo).type) {
				case "select-one":
				case "button":
					if (document.getElementById(proximo) != null) document.getElementById(proximo).focus();
					break;
				default:
					if (document.getElementById(proximo) != null) document.getElementById(proximo).select();
			}
		}
	}

	/**
	 * 
	 */
	function isset(varname)
	{
	  return(typeof(window[varname])!='undefined');
	}
